﻿#ifndef PARAMETERSETDIALOG_H
#define PARAMETERSETDIALOG_H

#include <QDialog>
#include <QTextCodec>
#include <QHostAddress>
#include <QNetworkInterface>
#include <QNetworkAddressEntry>

#include "items/paraitem.h"
#include "numerinputdialog.h"
#include "passworddialog.h"
#include "mybutton.h"
#include "promptdialog.h"
#include "setcontrolstyle.h"
#include "Lot/csvcode.h"
 

#define TEST_EMBROIDERY  1
#define TEST_PUNCH            2

//设置时间的头文件
#ifdef Q_OS_LINUX
#include <arpa/inet.h>
#include <hal-api.h>
#endif

namespace Ui {
class ParameterSetDialog;
}

class ParameterSetDialog : public QDialog
{
    Q_OBJECT

public:
    explicit ParameterSetDialog(QWidget *parent = 0);
    ~ParameterSetDialog();

private:
    Ui::ParameterSetDialog *ui;
    int m_itemPerPage;//界面每页条目数
    int m_curPage;//当前页数
    int m_rootCurPage;//超级用户界面当前页数
    QList<MyButton*> m_itemBtnList;
    QList <ParaItem> m_itemList;
    QList <ParaItem> m_allItemList;
    MCStatus m_mcStatus;//机器状态

private:
    void initControl();//初始化窗体控件，包括位置、尺寸、样式
    void initResolution();
    void initControlStyle();//初始化窗体控件样式
    void refreshUi();

private:
    QString getValueStr(int64_t val, int afterpoint);
    void changeValue(int buttenidx);
    void refreshValue();

public slots:
    void paraChange(int type, int id);

private:
    void refreshSensorPara(int min, int max, int num, ParaItem &item, u32 traverseState ,int m_nodeType);//刷新信号参数显示
    void saveParas(int idx = -1);
    void execItemClickEvent(s16 fun);//执行点击触发型参数的触发事件

private:
    ParaStruct m_mcParaValues;
    ParaStruct m_wkParaValues;

    int m_setedFlag;
    int m_paraType;    //参数类型(机器参数、工作参数、花样参数等)
    int m_paraTypeSort;    //参数类型分类
    QString m_networkCardID;//网卡ID(MAC地址)

    QString m_filePath;//配置文件
    bool isAuthority = true;//是否需要权限

public:
    void initData();
    void setTypeLogo(QString tStyle);//设置类型图标
    void setMainTitle(QString str);//设置主title
    void setSubTitle(QString str);//设置副title
    //(参数权限、参数类型、参数种类)得到相应参数类型列表，目前参数种类分类未使用
    void setItemList(int authority,int64_t type,int64_t sort = -1);
    void refreshProductType();//刷新产品类型

    //设置网络参数(IP和端口)
    void setNetworkItemList(int64_t type);

    //设置网关网络参数(IP和端口)
    void setGatewayNetworkItemList(int64_t type);

    void setCurPage(int idx);//设置当前页数
    void setItemValue(int idx,int value);//设置int型参数值
    void setItemStr(int idx,QString str);//设置字符型参数值
    int getItemValue(int idx);
    inline int getParaType(){return m_paraType;}//获取参数类型
    int exec();

public:
    int addParaItem(const QList<ParaItem> & itemList);
    int addParaItem(const ParaItem & item);

private slots:
    void on_button1_clicked();
    void on_button2_clicked();
    void on_button3_clicked();
    void on_button4_clicked();
    void on_button5_clicked();
    void on_button6_clicked();
    void on_button7_clicked();
    void on_button8_clicked();
    void on_button9_clicked();
    void on_button10_clicked();
    void on_button11_clicked();
    void on_button12_clicked();

    void on_buttonPgUp_clicked();
    void on_buttonPgDn_clicked();

    void on_buttonOk_clicked();
    void on_buttonCancel_clicked();

    void on_buttonParaRestore_clicked();
    void on_buttonReturn_clicked();

signals:
    void siUserLogin(s16 user);
    void siHMIDecrypt(QString id);//界面解密
    void siParameterImport();
    void siParameterExport();
    void siHMIUpgrade();
    void siMCUpgrade();
	void siExit();//退出程序
    void siChangePassword();//修改一级密码
    void siDeleteIni();//删除执行目录下的config.ini
    void siImportCSV();//导入csv文件
    void siDeleteCSV();//删除csv文件
    void siResetCSV();//重置安装调试进度
    void siDebugMode();//界面调试模式
    void siPatternClear();//花样总清
    void siVerRecovery();//版本恢复
};

#endif // PARAMETERSETDIALOG_H
